package com.blog.blogservice.config;

import com.blog.blogservice.util.JwtUtils;
import org.apache.shiro.authc.AuthenticationToken;

/**
 * 该类与UsernamePasswordToken差不多，都是AuthenticationToken接口的实现类
 * 目的是封装成UsernamePasswordToken让shiro进行登录、登出等操作
 *
 * JwtToken这个类实现了AuthenticationToken，如果我们将token作为参数构造出JwtToken对象的话，shiro的主体对象subject进行登录验证时就不用再new 一个UsernamePasswordToken 对象了，毕竟 JwtToken和UsernamePasswordToken 都继承了同一个接口。
 * 所以，说到这JwtToken的作用就显而易见了，目的就是构造一个AuthenticationToken对象以供shiro登录验证
 */
public class JwtToken implements AuthenticationToken {

    private static final long serialVersionUID = 1L;

    //加密后的 JWT token
    private String token;

    private String username;

    private String password;

    public JwtToken(String token){
        this.token = token;
        this.username = JwtUtils.getClaimFiled(token,"username");
    }

    @Override
    public Object getPrincipal() {
        return this.username;
    }

    @Override
    public Object getCredentials() {
        return token;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
